JavaScript
part 17/19 ยท 71.4 KB total
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Le code de l'opรฉrateur instanceOf illustre bien ce mรฉcanisme. A instanceOf B (ou de maniรจre รฉquivalente : instanceOf.call(A, B)) renvoie true si A est une instance de B, c'est-ร -dire si B.prototype est trouvรฉ dans le chaรฎne de prototypes de A, et false sinon :
function instanceOf(f) {
let o = this;
while (o !== null) {
o = Object.getPrototypeOf(o);
if (o === f.prototype) {
return true;
}
}
return false;
}
Par ailleurs, la mรฉthode Object.create introduite dans ECMAScript 5 permet d'รฉviter d'utiliser directement les fonctions constructeurs, leurs propriรฉtรฉs prototype et l'opรฉrateur new, pour ne travailler qu'avec des objets. L'utilisation de cette mรฉthode simplifie grandement la complexitรฉ du code et est donc recommandรฉe. La mรฉthode Object.create est dรฉfinie par
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
L'exemple prรฉcรฉdent peut alors รชtre rรฉรฉcrit
const MonObjet = {
function initialiser() {
this.maPropriete1 = 3;
}
}
const monInstance = Object.create(MonObjet);
monInstance.initialiser();
alert(monInstance.maPropriete1); // affiche 3
MonObjet.maPropriete2 = 5;
alert(monInstance.maPropriete2); // affiche 5
Sรฉparation des instructions
En C, chaque instruction se termine par un point-virgule. Cette pratique a fait du point-virgule une obligation dans de nombreux langages inspirรฉs de la syntaxe du C.
JavaScript est plus souple, permettant ร une fin de ligne de marquer implicitement la fin d'une instruction. Le but est de faciliter l'usage du langage aux personnes inexpรฉrimentรฉes en programmation informatique. Mais cette souplesse introduit des effets inattenduscite-ref-32[32] :
return
true;
Le parseur comprend cela comme deux instructions :
return;
true;
Les expressions de fonctions immรฉdiatement invoquรฉes lorsque le programmeur s'appuie sur les fins d'instruction implicites rencontrent รฉgalement ce genre de problรจme avec l'usage des parenthรจses :
maVariable1 = maVariable2 + maVariable3
(function () {
// code
})()
est traitรฉ comme
maVariable1 = maVariable2 + maVariable3(function () { /* code */ })();
Les ouvrages de programmation avancรฉs en JavaScript mettent en garde contre les effets inattendus de la dรฉduction automatique de fin d'instruction et conseillent d'รฉcrire un point-virgule ร la fin de chaque instruction, ce qui n'empรชche pas les surprises lorsqu'on oublie le point-virgule, d'autant plus quand la compression du code impose le retrait des retours chariot.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ